package com.sdp.wx.task;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.sdp.right.cron.ScheduledOfTask;
import com.sdp.wx.db.wx_metering_utensil.entity.WxMeteringUtensil;
import com.sdp.wx.db.wx_metering_utensil.service.IWxMeteringUtensilService;
import com.sdp.wx.db.wx_metering_utensil_detection.entity.WxMeteringUtensilDetection;
import com.sdp.wx.db.wx_metering_utensil_detection.service.IWxMeteringUtensilDetectionService;
import com.sdp.wx.db.wx_sys_config.entity.WxSysConfig;
import com.sdp.wx.db.wx_sys_config.service.IWxSysConfigService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.List;

@Component
public class WxMeteringUtensilDetectionTask implements ScheduledOfTask {
    @Autowired
    private IWxMeteringUtensilDetectionService iWxMeteringUtensilDetectionService;
    @Autowired
    private IWxMeteringUtensilService iWxMeteringUtensilService;

    @Autowired
    private IWxSysConfigService iWxSysConfigService;
    /**
     * 定期检测计量器具是否需要检测
     * 根据计量器具上次检定日期（如果没有检定过，根据使用日期）和检定周期（3个月、6个月、12个月）对需要进行检定的计量器具进行检定
     */
    @Override
    public void execute() {
        // 查询所有计量器具
        List<WxMeteringUtensil> wxMeteringUtensilList=iWxMeteringUtensilService.list();
        // 清空数据表
        QueryWrapper<WxMeteringUtensilDetection> queryWrapper=new QueryWrapper<>();
        if(iWxMeteringUtensilDetectionService.list(queryWrapper).size()>0){
            for(WxMeteringUtensilDetection wxMeteringUtensilDetection:iWxMeteringUtensilDetectionService.list(queryWrapper)){
                iWxMeteringUtensilDetectionService.removeById(wxMeteringUtensilDetection);
            }
        }
        if(wxMeteringUtensilList.size()>0){
            List<WxMeteringUtensilDetection> wxMeteringUtensilDetectionList=new ArrayList<>();
            WxSysConfig wxSysConfig=iWxSysConfigService.queryWxSysConfigByCode("rPGk+vyFWqq");
            for(WxMeteringUtensil wxMeteringUtensil:wxMeteringUtensilList){
                // 鉴定日期为空，根据使用日期进行判断
                LocalDate nowLocalDate=LocalDate.now();
                LocalDate localDate=null;
                if(StringUtils.isEmpty(wxMeteringUtensil.getIdentifyTime())){
                    localDate=wxMeteringUtensil.getDeviceUseTime();
                }else{
                    localDate=wxMeteringUtensil.getIdentifyTime();
                }
                //鉴定周期 3个月
                if("1".equals(wxMeteringUtensil.getIdentifyCycle())){
                    localDate= localDate.plusMonths(3);
                }
                //鉴定周期 6个月
                if("2".equals(wxMeteringUtensil.getIdentifyCycle())){
                    localDate=localDate.plusMonths(6);
                }
                //鉴定周期 9个月
                if("3".equals(wxMeteringUtensil.getIdentifyCycle())){
                    localDate= localDate.plusMonths(9);
                }
                //鉴定周期 12个月
                if("4".equals(wxMeteringUtensil.getIdentifyCycle())){
                    localDate=localDate.plusMonths(12);
                }
                long daysBetween = ChronoUnit.DAYS.between(localDate, nowLocalDate);
                if(daysBetween<Long.parseLong(wxSysConfig.getParamVal())){
                    WxMeteringUtensilDetection wxMeteringUtensilDetection=new WxMeteringUtensilDetection();
                    BeanUtils.copyProperties(wxMeteringUtensil, wxMeteringUtensilDetection);
                    wxMeteringUtensilDetectionList.add(wxMeteringUtensilDetection);
                }
            }
            iWxMeteringUtensilDetectionService.saveBatch(wxMeteringUtensilDetectionList);
        }
    }
}
